Apprendre le C++ by collectif

Apprendre le C++ by collectif

Auteur:collectif [collectif]
La langue: fra
Format: epub
Tags: Informatique
Éditeur: O'Reilly
Publié: 2009-10-17T18:25:29+00:00


min (adr1, adr2) = monsieur

Application du patron min au type char *

Livre.book Page 347 Mardi, 26. juin 2007 7:02 19

1 - Exemple de création et d’utilisation d’un patron de fonctions

347

Le résultat peut surprendre, si vous vous attendiez à ce que min fournisse « la chaîne » "bon-

jour". En fait, à la rencontre de l’expression min (adr1, adr2), le compilateur a généré la

fonction suivante :

char * min (char * a, char * b)

{ if (a < b) return a ;

else return b ;

}

La comparaison a<b porte donc sur les valeurs des pointeurs reçus en arguments (ici, a était

inférieur à b, mais il peut en aller autrement dans d’autres implémentations). En revanche,

l’affichage obtenu par l’opérateur << porte non plus sur ces adresses, mais sur les chaînes

situées à ces adresses.

1.3.2 Application à un type classe

Pour pouvoir appliquer le patron min à une classe, il est bien sûr nécessaire que l’opérateur <

puisse s’appliquer à deux opérandes de ce type classe. Voici un exemple dans lequel nous

appliquons min à deux objets de type vect, classe munie d’un opérateur < fournissant un

résultat basé sur le module des vecteurs :

#include <iostream>

using namespace std ;

// le patron de fonctions min

template <class T> T min (T a, T b)

{ if (a < b) return a ;

else return b ;

}

// la classe vect

class vect

{ int x, y ;

public :

vect (int abs=0, int ord=0) { x=abs ; y=ord; }

void affiche () { cout << x << " " << y ; }

friend int operator < (vect, vect) ;

} ;

int operator < (vect a, vect b)

{ return a.x*a.x + a.y*a.y < b.x*b.x + b.y*b.y ;

}

// un exemple d’utilisation de min

main()

{ vect u (3, 2), v (4, 1), w ;

w = min (u, v) ;

cout << "min (u, v) = " ; w.affiche() ;

}

min (u, v) = 3 2

Utilisation du patron min pour la classe vect

Livre.book Page 348 Mardi, 26. juin 2007 7:02 19

Les patrons de fonctions

348

CHAPITRE 17

Naturellement, si nous cherchons à appliquer notre patron min à une classe pour laquel e

l’opérateur < n’est pas défini, le compilateur le signalera exactement de la même manière que

si nous avions écrit nous-mêmes la fonction min pour ce type.

Remarque

Un patron de fonctions pourra s’appliquer à des classes patrons, c’est-à-dire à un type de

classe instancié par un patron de classes. Nous en verrons des exemples dans le prochain

chapitre.

1.4 Contraintes d’utilisation d’un patron

Les instructions de définition d’un patron ressemblent à des instructions exécutables de défi-

nition de fonction. Néanmoins, le mécanisme même des patrons fait que ces instructions sont

utilisées par le compilateur pour fabriquer (instancier), chaque fois qu’il est nécessaire, les

instructions correspondant à la fonction requise ; en ce sens, ce sont donc des déclarations :

leur présence est toujours nécessaire, et il n’est pas possible de créer un module objet corres-

pondant à un patron de fonctions. Tout se passe en fait comme si, avec la notion de patron de

fonctions, apparaissaient deux niveaux de déclarations. On retrouvera le même phénomène

pour les patrons de classes. Par la suite, nous continuerons à parler de « définition d’un

patron ». En pratique, on placera les définitions de patrons dans un fichier approprié

d’extension h.



Télécharger



Déni de responsabilité:
Ce site ne stocke aucun fichier sur son serveur. Nous ne faisons qu'indexer et lier au contenu fourni par d'autres sites. Veuillez contacter les fournisseurs de contenu pour supprimer le contenu des droits d'auteur, le cas échéant, et nous envoyer un courrier électronique. Nous supprimerons immédiatement les liens ou contenus pertinents.